下载

安装

git下来然后看文档

1
cat ./doc/INSTALL-UBUNTU

然后跟着做就行

1
cd src
1
2
3
4
./configure --disable-openmp && make -s clean && make -sj4
mv ../run/john ../run/john-non-omp
./configure CPPFLAGS='-DOMP_FALLBACK -DOMP_FALLBACK_BINARY="\"john-non-omp\""'
make -s clean && make -sj4

测试:在john/run

1
./john --test=0

破解基本哈希

基本使用

自动破解

示例命令

1
john --wordlist=/usr/share/wordlists/rockyou.txt hash_to_crack.txt

格式特定破解

确定哈希值

有时,John 可能不会与自动识别和加载哈希值很好地配合,可以使用一个名为 hash-identifier 的 Python 工具,它非常易于使用,并会输出要破解的哈希值可能属于哪些不同类型的哈希,如果第一个方法失败,这将提供更多选择。
下载

1
wget https://gitlab.com/kalilinux/packages/hash-identifier/-/raw/kali/master/hash-id.py

使用

1
python3 hash-id.py

用法

一旦确定了要处理的哈希值,可以告诉 John 在破解提供的哈希值时使用它,语法如下john --format=[format] --wordlist=[path to wordlist] [path to file]

1
john --format=raw-md5 --wordlist=/usr/share/wordlists/rockyou.txt hash_to_crack.txt
格式说明

当你告诉 John 使用格式时,如果你处理的是标准哈希类型,例如上面的 md5,你必须用 raw- 作为前缀来告诉 John 你只处理标准哈希类型,尽管这并不总是适用。要检查是否需要添加前缀,你可以使用

1
john --list=formats

列出 John 的所有格式,然后手动检查或使用类似

1
john --list=formats | grep -iF "md5" 

的 grep 命令搜索你的哈希类型。

回答问题

hash1.txt 是什么类型的哈希?

用hash-id.py跑一下

hash1.txt 的破解值是什么?

1
john --format=raw-md5 --wordlist=/usr/share/wordlists/rockyou.txt hash1.txt

hash2.txt 是什么类型的哈希?

之前hash-id.py顷刻炼化

hash2.txt 的破解值是什么?

注意到之前显示类型有显示个MySQL5 - SHA-1
再根据类型前缀查询查到有个mysql-sha1

感觉应该就是它

1
john --format=mysql-sha1 --wordlist=/usr/share/wordlists/rockyou.txt hash2.txt


很尴尬
换成标准的看看,搜前缀还是要带-iF,要不然大写的会忽略

1
john --list=formats|grep -iF sha1

1
john --format=Raw-SHA1 --wordlist=/usr/share/wordlists/rockyou.txt hash2.txt

hash3.txt 是什么类型的哈希?

hash4.txt 是什么类型的哈希?

Whirlpool

hash3.txt 的破解值是什么?

1
john --format=Raw-SHA256 --wordlist=/usr/share/wordlists/rockyou.txt hash3.txt

hash4.txt 的破解值是什么?

1
john --format=Whirlpool --wordlist=/usr/share/wordlists/rockyou.txt hash4.txt

破解 Windows 身份验证哈希

NThash 是现代 Windows 操作系统机器用于存储用户和服务密码的哈希格式。它也通常被称为 NTLM,这指的是之前版本的 Windows 用于哈希密码的格式 LM,因此 NT/LM
在 Windows 中,SAM (安全账户管理器) 用于存储用户账户信息,包括用户名和哈希过的密码。您可以通过在 Windows 机器上使用 Mimikatz 等工具转储 SAM 数据库,或使用 Active Directory 数据库:NTDS.dit 来获取 NTHash/NTLM 哈希。您可能不需要破解这些哈希来继续进行权限提升,因为您通常可以执行“哈希传递”(pass the hash) 攻击来代替,但有时,如果存在弱密码策略,破解哈希也是一个可行的选项。

实操以及回答问题

我们需要设置 –format 标志为多少才能破解这个哈希值

hash-id.py爆出是md5类型并且是个域缓存凭证

然后按类型搜md5搜到一个nt

这个密码破解后的值是什么?

1
john --format=NT --wordlist=/usr/share/wordlists/rockyou.txt ntlm.txt

破解 /etc/shadow 哈希

John 对所需数据格式非常挑剔,因此,要用unshadow处理一下

unshadow(要有sudo权限)

这个工具主要是将 /etc/shadow 与 /etc/passwd 文件结合生成供john破解的文件

1
unshadow /etc/passwd /etc/shadow > unshadowed.txt

处理好的文件内容如下

回答问题

root密码是多少

1
john --wordlist=/usr/share/wordlists/rockyou.txt --format=sha512crypt etc_hashes.txt

单一破解模式

适用场景

如果用户名是Markus,一些可能的密码可能是:
Markus1, Markus2, Markus3(等等)
MArkus, MARkus, MARKus(等等)
……….

用法以及回答问题

1
john --single --format=raw-md5 hash07.txt

理论上这样就行,但是肥肠坏,要先改文件,改成usr:hash的格式

然后再爆破

自定义规则

自定义规则定义在 john.conf 文件中

草,msf有john啊

如何创建自定义规则

第一行:

1
[List.Rules:koi]

然后使用正则表达式风格的模式匹配来定义单词将被修改的位置

1
2
3
4
Az : 将单词与您定义的字符附加在末尾
A0 : 将单词与您定义的字符添加在开头
c : 位置性地大写字符

还必须定义应该附加、前置或包含哪些字符。通过在方括号中添加字符集来实现,即它们应该使用的地方。这些字符集遵循双引号内的修饰符模式

1
2
3
4
5
6
[0-9] : 将包含数字 0-9
[0] : 将仅包含数字 0
[A-z] : 将包含大小写字母
[a-z] :仅包括小写字母
[!£$%@] 将包含符号 ! 、 £ 、 $ 、 % 和 @

比如一个示例规则

1
2
3
[List.Rules:PoloPassword]

cAz"[0-9] [!£$%@]"

用法

1
john --wordlist=[字典] --rule=[规则名] [要破解的文件]

破解受密码保护的 ZIP 文件

先转换hash值出来

1
zip2john secure.zip > zip_hash.txt

然后直接用字典破解就行

1
john --wordlist=/usr/share/wordlists/rockyou.txt zip_hash.txt

回答问题

破解受密码保护的 RAR 存档

1
rar2john secure.rar > rar_hash.txt
1
john --wordlist=/usr/share/wordlists/rockyou.txt rar_hash.txt

回答问题

破解 SSH 密钥

1
ssh2john.py id_rsa > id_rsa_hash.txt
1
john --wordlist=/usr/share/wordlists/rockyou.txt id_rsa_hash.txt